
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.script.ScriptEngine;
import javax.swing.*;
import javax.script.ScriptEngineManager;


public class Main extends JFrame implements ActionListener {
    //定义俩个面板
    private JPanel north,center;
    //定义一个文本框用于显示计算结果
    private JTextField field;
    //定义按钮
    private JButton[] btns;
    //按钮文字数组
    private String[] str;
    //计算引擎
    private ScriptEngine engine;
    public Main(){//构造函数无参
        //设置窗口的标题
        setTitle("计算器");
        //设置窗口大小 宽 高
        setSize(900,900);
        //关闭窗口时退出程序
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //设置窗口居中
        setLocation((int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-this.getWidth())/2,
                (int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-this.getHeight())/2);
        setLocationRelativeTo(null);
        // 初始化窗口
        initComponent();
        //设置窗口可见
        setVisible(true);
        //窗口中添加内容


    }
    //初始化窗口的方法
    //无参、无返回值
    private void initComponent() {
        //窗口 添加内容
        //获取javaScript引擎
        ScriptEngineManager manager=new ScriptEngineManager();
        engine=manager.getEngineByName("JavaScript");
        //创建面板
        north=new JPanel();
        center=new JPanel();
        //创建文本框
        field=new JTextField();
        //设置文本框属性
        //field.setColumns();
        //设置宽高属性
        field.setPreferredSize(new Dimension(700,200));
        //输入框禁止编辑
        field.setEditable(false);
        //设置字体格式
        Font font=new Font("SanSerif",Font.BOLD,25);
        //设置字体、加粗、大小
        field.setFont(font);
        //field.setFont(new Font("SanSerif",Font.BOLD,25));
        //以数组的形式声明的一个按钮
        str=new String[]{
                "7","8","9","+",
                "4","5","6","-",
                "1","2","3","×",
                "0",".","=","÷",
                "C","B","T","S",
        };
        //创建按钮
        btns=new JButton[str.length];
        for(int i=0;i<btns.length;i++){
            btns[i]=new JButton(str[i]);
            btns[i].setFont(new Font("SanSerif",Font.BOLD,25));
        };
        //设置按钮的监听器
        for(int i=0;i<btns.length;i++){
            btns[i].addActionListener(this);
        }

        //设置布局
        north.setLayout(new BorderLayout());
        //设置按钮面板的布局
        center.setLayout(new GridLayout(5,4));
        //将文本框添加到上面的面板
        north.add(field);
        //将btn添加到center面板
        for(int i=0;i<btns.length;i++){
            center.add(btns[i]);
        }
        //将面板添加到窗口中
        this.add(north,BorderLayout.NORTH);
        this.add(center);
    }

    public static void main(String[] args) {
    new Main();
    }
//重写方法
    @Override
    public void actionPerformed(ActionEvent e) {
       // System.out.println(e.getSource());
        Object source=e.getSource();
        if(source instanceof JButton){
            JButton btn=(JButton)source;
            //System.out.println(btn);
            //获取按键文字
            String text=btn.getText();
            //展示到文本框中
            this.showBtnText(text);
        }
    }
    private void showBtnText(String text) {
        System.out.println(text);
        //判断text是不是为数字
        //用正则表达式matches检测text是不是单个数字
        //System.out.println(text.matches("\\d"));
        Boolean isNum=text.matches("\\d");
        if(isNum){//如果是则拼接在字符串上
            String oldText=field.getText();
            field.setText(oldText+text);
        } else{//不是就特殊处理
            System.out.println(text);
            if("C".equals(text)){
               System.out.println("C");
               //清空输入框
                field.setText("");
            }else if("B".equals(text)){
            System.out.println("B");
            //退格
            if(field.getText().length()>0){
            //先获取输入框内容，然后删除最后一位，将删除内容重新打印到输入框
            field.setText( field.getText().substring(0,field.getText().length()-1));
            }
            }else if("T".equals(text)){
            System.out.println("T");
            //显示时间
            }else if("S".equals(text)){
            System.out.println("S");
            //关闭时间显示
            }
            else if("=".equals(text)) {
                System.out.println("=");
            try{
                //获得要计算的内容
                String txt = field.getText();
                System.out.println(txt);
                txt=txt.replaceAll("×","*").replaceAll("÷","/");
                //使用计算引擎进行计算
                Object o = engine.eval(txt);
                //计算输入框中的内容
                System.out.println(o);
                //将o转换为字符串
                field.setText(o+"");
            }catch(Exception e){
                e.printStackTrace();
            }

            }
            else{
                String oldText=field.getText();
                field.setText(oldText+text);
            }
//            String oldText=field.getText();
//            String oldNum=field.getText();
//            System.out.println(oldNum);
//            //清空输入区
//            field.setText(text);
        }
        //输入框上的文字怎么累加

        //输入框上已有的文字

        //field.setText(text);
        //如果是运算符怎么办
    }
}


